<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.2.2" />
<style type="text/css">
/* Debug borders */
p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {
/*
  border: 1px solid red;
*/
}

body {
  margin: 1em 5% 1em 5%;
}

a {
  color: blue;
  text-decoration: underline;
}
a:visited {
  color: fuchsia;
}

em {
  font-style: italic;
}

strong {
  font-weight: bold;
}

tt {
  color: navy;
}

h1, h2, h3, h4, h5, h6 {
  color: #527bbd;
  font-family: sans-serif;
  margin-top: 1.2em;
  margin-bottom: 0.5em;
  line-height: 1.3;
}

h1 {
  border-bottom: 2px solid silver;
}
h2 {
  border-bottom: 2px solid silver;
  padding-top: 0.5em;
}

div.sectionbody {
  font-family: serif;
  margin-left: 0;
}

hr {
  border: 1px solid silver;
}

p {
  margin-top: 0.5em;
  margin-bottom: 0.5em;
}

pre {
  padding: 0;
  margin: 0;
}

span#author {
  color: #527bbd;
  font-family: sans-serif;
  font-weight: bold;
  font-size: 1.1em;
}
span#email {
}
span#revision {
  font-family: sans-serif;
}

div#footer {
  font-family: sans-serif;
  font-size: small;
  border-top: 2px solid silver;
  padding-top: 0.5em;
  margin-top: 4.0em;
}
div#footer-text {
  float: left;
  padding-bottom: 0.5em;
}
div#footer-badges {
  float: right;
  padding-bottom: 0.5em;
}

div#preamble,
div.tableblock, div.imageblock, div.exampleblock, div.verseblock,
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
div.admonitionblock {
  margin-right: 10%;
  margin-top: 1.5em;
  margin-bottom: 1.5em;
}
div.admonitionblock {
  margin-top: 2.5em;
  margin-bottom: 2.5em;
}

div.content { /* Block element content. */
  padding: 0;
}

/* Block element titles. */
div.title, caption.title {
  font-family: sans-serif;
  font-weight: bold;
  text-align: left;
  margin-top: 1.0em;
  margin-bottom: 0.5em;
}
div.title + * {
  margin-top: 0;
}

td div.title:first-child {
  margin-top: 0.0em;
}
div.content div.title:first-child {
  margin-top: 0.0em;
}
div.content + div.title {
  margin-top: 0.0em;
}

div.sidebarblock > div.content {
  background: #ffffee;
  border: 1px solid silver;
  padding: 0.5em;
}

div.listingblock {
  margin-right: 0%;
}
div.listingblock > div.content {
  border: 1px solid silver;
  background: #f4f4f4;
  padding: 0.5em;
}

div.quoteblock > div.content {
  padding-left: 2.0em;
}

div.attribution {
  text-align: right;
}
div.verseblock + div.attribution {
  text-align: left;
}

div.admonitionblock .icon {
  vertical-align: top;
  font-size: 1.1em;
  font-weight: bold;
  text-decoration: underline;
  color: #527bbd;
  padding-right: 0.5em;
}
div.admonitionblock td.content {
  padding-left: 0.5em;
  border-left: 2px solid silver;
}

div.exampleblock > div.content {
  border-left: 2px solid silver;
  padding: 0.5em;
}

div.verseblock div.content {
  white-space: pre;
}

div.imageblock div.content { padding-left: 0; }
div.imageblock img { border: 1px solid silver; }
span.image img { border-style: none; }

dl {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
dt {
  margin-top: 0.5em;
  margin-bottom: 0;
  font-style: italic;
}
dd > *:first-child {
  margin-top: 0;
}

ul, ol {
    list-style-position: outside;
}
ol.olist2 {
  list-style-type: lower-alpha;
}

div.tableblock > table {
  border: 3px solid #527bbd;
}
thead {
  font-family: sans-serif;
  font-weight: bold;
}
tfoot {
  font-weight: bold;
}

div.hlist {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
div.hlist td {
  padding-bottom: 5px;
}
td.hlist1 {
  vertical-align: top;
  font-style: italic;
  padding-right: 0.8em;
}
td.hlist2 {
  vertical-align: top;
}

@media print {
  div#footer-badges { display: none; }
}

div#toctitle {
  color: #527bbd;
  font-family: sans-serif;
  font-size: 1.1em;
  font-weight: bold;
  margin-top: 1.0em;
  margin-bottom: 0.1em;
}

div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
  margin-top: 0;
  margin-bottom: 0;
}
div.toclevel2 {
  margin-left: 2em;
  font-size: 0.9em;
}
div.toclevel3 {
  margin-left: 4em;
  font-size: 0.9em;
}
div.toclevel4 {
  margin-left: 6em;
  font-size: 0.9em;
}
/* Workarounds for IE6's broken and incomplete CSS2. */

div.sidebar-content {
  background: #ffffee;
  border: 1px solid silver;
  padding: 0.5em;
}
div.sidebar-title, div.image-title {
  font-family: sans-serif;
  font-weight: bold;
  margin-top: 0.0em;
  margin-bottom: 0.5em;
}

div.listingblock div.content {
  border: 1px solid silver;
  background: #f4f4f4;
  padding: 0.5em;
}

div.quoteblock-content {
  padding-left: 2.0em;
}

div.exampleblock-content {
  border-left: 2px solid silver;
  padding-left: 0.5em;
}

/* IE6 sets dynamically generated links as visited. */
div#toc a:visited { color: blue; }
</style>
<script type="text/javascript">
/*<![CDATA[*/
window.onload = function(){generateToc(2)}
/* Author: Mihai Bazon, September 2002
 * http://students.infoiasi.ro/~mishoo
 *
 * Table Of Content generator
 * Version: 0.4.sp
 *
 * Feel free to use this script under the terms of the GNU General Public
 * License, as long as you do not remove or alter this notice.
 */

 /* modified by Troy D. Hanson, September 2006. License: GPL */
 /* modified by Stuart Rackham, October 2006. License: GPL */
 /* modified by Shawn Pearce, August 2009. License: GPL */

function getText(el) {
  var text = "";
  for (var i = el.firstChild; i != null; i = i.nextSibling) {
    if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
      text += i.data;
    else if (i.firstChild != null)
      text += getText(i);
  }
  return text;
}

function TocEntry(el, text, toclevel) {
  this.element = el;
  this.text = text;
  this.toclevel = toclevel;
  this.assigned = false;

  if (el.id != '') {
    this.id = el.id;

  } else {
    var a = el.firstChild;
    if ((a.tagName == "a" || a.tagName == "A") && a.id != "") {
      this.id = a.id;
    } else {
      this.id = '';
    }
  }
}

function tocEntries(el, toclevels) {
  var result = new Array;
  var re = new RegExp('[hH]([2-'+(toclevels+1)+'])');
  // Function that scans the DOM tree for header elements (the DOM2
  // nodeIterator API would be a better technique but not supported by all
  // browsers).
  var iterate = function (el) {
    for (var i = el.firstChild; i != null; i = i.nextSibling) {
      if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
        var mo = re.exec(i.tagName)
        if (mo)
          result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
        iterate(i);
      }
    }
  }
  iterate(el);
  return result;
}

// This function does the work. toclevels = 1..4.
function generateToc(toclevels) {
  var simple_re = new RegExp('^[a-zA-Z._ -]{1,}$');
  var entries = tocEntries(document.getElementsByTagName("body")[0], toclevels);
  var usedIds = new Array();

  for (var i = 0; i < entries.length; ++i) {
    var entry = entries[i];
    if (entry.id != "")
      usedIds[entry.id] = entry;
  }

  for (var i = 0; i < entries.length; ++i) {
    var entry = entries[i];
    if (entry.id != "" || !simple_re.exec(entry.text))
      continue;

    var n = entry.text.replace(/ /g, '_').toLowerCase();
    var e = usedIds[n];
    if (e) {
      if (e.assigned)
        e.id = '';
      continue;
    }

    entry.assigned = true;
    entry.id = n;
    entry.element.id = entry.id;
    usedIds[n] = entry;
  }

  for (var i = 0; i < entries.length; ++i) {
    var entry = entries[i];
    if (entry.id == '') {
      entry.id = "toc" + i;
      entry.element.id = entry.id;
    }
  }

  var toc = document.getElementById("toc");
  for (var i = 0; i < entries.length; ++i) {
    var entry = entries[i];
    var a = document.createElement("a");
    a.href = "#" + entry.id;
    a.appendChild(document.createTextNode(entry.text));
    var div = document.createElement("div");
    div.appendChild(a);
    div.className = "toclevel" + entry.toclevel;
    toc.appendChild(div);
  }
}
/*]]>*/
</script>
<title>gerrit stream-events</title>
</head>
<body>
<div id="header">
<h1>gerrit stream-events</h1>
<span id="revision">version 2.1.3</span>
<div id="toc">
  <div id="toctitle">Table of Contents</div>
  <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
</div>
</div>
<h2>NAME</h2>
<div class="sectionbody">
<p>gerrit stream-events - Monitor events occuring in real time</p>
</div>
<h2>SYNOPSIS</h2>
<div class="sectionbody">
<div class="verseblock">
<div class="content"><em>ssh</em> -p &lt;port&gt; &lt;host&gt; <em>gerrit stream-events</em></div></div>
</div>
<h2>DESCRIPTION</h2>
<div class="sectionbody">
<p>Provides a portal into the major events occuring on the server,
outputing activity data in real-time to the client.  Events are
filtered by the caller's access permissions, ensuring the caller
only receives events for changes they can view on the web, or in
the project repository.</p>
<p>Event output is in JSON, one event per line.</p>
</div>
<h2>ACCESS</h2>
<div class="sectionbody">
<p>Any user who has configured an SSH key.</p>
</div>
<h2>SCRIPTING</h2>
<div class="sectionbody">
<p>This command is intended to be used in scripts.</p>
</div>
<h2>EXAMPLES</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre><tt>  $ ssh -p 29418 review.example.com gerrit stream-events
  {"type":"comment-added",change:{"project":"tools/gerrit", ...}, ...}
  {"type":"comment-added",change:{"project":"tools/gerrit", ...}, ...}</tt></pre>
</div></div>
</div>
<h2>SCHEMA</h2>
<div class="sectionbody">
<p>The JSON messages consist of nested objects referencing the <strong>change</strong>,
<strong>patchset</strong>, <strong>account</strong> involved, and other attributes as appropriate.
The currently supported message types are <strong>patchset-added</strong>,
<strong>comment-added</strong>, <strong>change-merged</strong>, and <strong>change-abandoned</strong>.</p>
<p>Note that any field may be missing in the JSON messages, so consumers of
this JSON stream should deal with that appropriately.</p>
<h3>Events</h3>
<h4>Patchset Added</h4>
<div class="hlist"><table>
<tr>
<td class="hlist1">
type
</td>
<td class="hlist2">
"patchset-added"
</td>
</tr>
<tr>
<td class="hlist1">
change
</td>
<td class="hlist2">
<a href="#change">change attribute</a>
</td>
</tr>
<tr>
<td class="hlist1">
patchset
</td>
<td class="hlist2">
<a href="#patchset">patchset attribute</a>
</td>
</tr>
<tr>
<td class="hlist1">
uploader
</td>
<td class="hlist2">
<a href="#account">account attribute</a>
</td>
</tr>
</table></div>
<h4>Change Abandoned</h4>
<div class="hlist"><table>
<tr>
<td class="hlist1">
type
</td>
<td class="hlist2">
"change-abandoned"
</td>
</tr>
<tr>
<td class="hlist1">
change
</td>
<td class="hlist2">
<a href="#change">change attribute</a>
</td>
</tr>
<tr>
<td class="hlist1">
patchset
</td>
<td class="hlist2">
<a href="#patchset">patchset attribute</a>
</td>
</tr>
<tr>
<td class="hlist1">
abandoner
</td>
<td class="hlist2">
<a href="#account">account attribute</a>
</td>
</tr>
</table></div>
<h4>Change Merged</h4>
<div class="hlist"><table>
<tr>
<td class="hlist1">
type
</td>
<td class="hlist2">
"change-merged"
</td>
</tr>
<tr>
<td class="hlist1">
change
</td>
<td class="hlist2">
<a href="#change">change attribute</a>
</td>
</tr>
<tr>
<td class="hlist1">
patchset
</td>
<td class="hlist2">
<a href="#patchset">patchset attribute</a>
</td>
</tr>
<tr>
<td class="hlist1">
submitter
</td>
<td class="hlist2">
<a href="#account">account attribute</a>
</td>
</tr>
</table></div>
<h4>Comment Added</h4>
<div class="hlist"><table>
<tr>
<td class="hlist1">
type
</td>
<td class="hlist2">
"comment-added"
</td>
</tr>
<tr>
<td class="hlist1">
change
</td>
<td class="hlist2">
<a href="#change">change attribute</a>
</td>
</tr>
<tr>
<td class="hlist1">
patchset
</td>
<td class="hlist2">
<a href="#patchset">patchset attribute</a>
</td>
</tr>
<tr>
<td class="hlist1">
author
</td>
<td class="hlist2">
<a href="#account">account attribute</a>
</td>
</tr>
<tr>
<td class="hlist1">
comment
</td>
<td class="hlist2">
Comment text author had written
</td>
</tr>
</table></div>
<h3>Attributes</h3>
<p>Attributes are part events to give context related to the event.</p>
<div class="hlist"><a id="change"></a><table>
<tr>
<td class="hlist1">
change
</td>
<td class="hlist2">
The Gerrit change the event is related to
<div class="hlist"><table>
<tr>
<td class="hlist1">
project
</td>
<td class="hlist2">
Project path in Gerrit
</td>
</tr>
<tr>
<td class="hlist1">
branch
</td>
<td class="hlist2">
Branch name within project
</td>
</tr>
<tr>
<td class="hlist1">
id
</td>
<td class="hlist2">
Change identifier
</td>
</tr>
<tr>
<td class="hlist1">
number
</td>
<td class="hlist2">
Change number (deprecated)
</td>
</tr>
<tr>
<td class="hlist1">
subject
</td>
<td class="hlist2">
Description of change
</td>
</tr>
<tr>
<td class="hlist1">
owner
</td>
<td class="hlist2">
Owner in account attribute
</td>
</tr>
<tr>
<td class="hlist1">
url
</td>
<td class="hlist2">
Canonical URL to reach this change
</td>
</tr>
</table></div>
</td>
</tr>
</table></div>
<div class="hlist"><a id="account"></a><table>
<tr>
<td class="hlist1">
account
</td>
<td class="hlist2">
An account that is related to an event or attribute
<div class="hlist"><table>
<tr>
<td class="hlist1">
name
</td>
<td class="hlist2">
Account user's full name
</td>
</tr>
<tr>
<td class="hlist1">
email
</td>
<td class="hlist2">
Account user's preferred email
</td>
</tr>
</table></div>
</td>
</tr>
</table></div>
<div class="hlist"><a id="patchset"></a><table>
<tr>
<td class="hlist1">
patchset
</td>
<td class="hlist2">
Refers to a specific patchset within a change
<div class="hlist"><table>
<tr>
<td class="hlist1">
number
</td>
<td class="hlist2">
The patchset number
</td>
</tr>
<tr>
<td class="hlist1">
revision
</td>
<td class="hlist2">
Git commit-ish for this patchset
</td>
</tr>
<tr>
<td class="hlist1">
ref
</td>
<td class="hlist2">
Git reference pointing at revision
</td>
</tr>
<tr>
<td class="hlist1">
uploader
</td>
<td class="hlist2">
Uploader of patch set in account attribute
</td>
</tr>
</table></div>
</td>
</tr>
</table></div>
</div>
<h2>SEE ALSO</h2>
<div class="sectionbody">
<ul>
<li>
<p>
<a href="access-control.html">Access Controls</a>
</p>
</li>
</ul>
</div>
<hr style="
  height: 2px;
  color: silver;
  margin-top: 1.2em;
  margin-bottom: 0.5em;
">
<p>Part of <a href="index.html">Gerrit Code Review</a></p>
<div id="footer">
<div id="footer-text">
Version 2.1.3<br />
Last updated 21-Jun-2010 17:43:56 PDT
</div>
</div>
</body>
</html>
